<?php
/**
 * SESSIONS 控制 Model
 * Created by PhpStorm.
 * User: poptser
 * Email: poptser@foxmail.com
 * Date: 2016/8/18
 * Time: 15:44
 */

namespace SDXApi\Model;


use Think\Model;

class SessionsModel extends Model
{
    /**
     * 根据UID 获取当前用户的session
     * @param $uid
     */
    public function get_session($uid){
        $session = $this->where(array("userid"=>$uid))->find();
        if($session){
            return $session;
            //当前用户有缓存的SESSION 数据 （还未判断是否过期）
        }else{
            //未找到 用户缓存数据
            return false;
        }
    }

    /**
     *新增一个session（数据表内容）
     */
    public function add_session($uid,$life_time,$email,$user_rank,$user_name,$data){
        $data=array(
            'sesskey'=>md5(uniqid(mt_rand(), true)),
            'expiry'=>time()+$life_time,
            'ip'=>get_client_ip(),
            'userid'=>$uid,
            'email'=>$email,
            'user_rank'=>$user_rank,
            'user_name'=>$user_name,
            'data'=>serialize($data)
        );
        return $this->add($data);
    }

    /**
     *更新一个session（数据表内容）
     * 如有uid 则更新sesskey 和其数据  为数据过期 全部更新
     * 没有uid  则在有效期内更新  不刷新sesskey
     */
    public function update_session($sesskey,$uid,$life_time,$email,$user_rank,$user_name,$data){

        $data=array(
            'expiry'=>time()+$life_time,
            'ip'=>get_client_ip(),
            'userid'=>$uid,
            'email'=>$email,
            'user_rank'=>$user_rank,
            'user_name'=>$user_name,
            'data'=>serialize($data)
        );
        return $this->where(array("sesskey" =>$sesskey))->save($data);
        //dump($this->getlastsql());
    }

    /**
     *删除一个session_data
     */
    public function del_session_data($sesskey){
        if(!is_numeric($sesskey)) return false;
        return M("sessions_data")->where(array("sesskey"=>$sesskey))->delete();
    }

    /**
     *更新一个session_data 或者新建一个
     */
    public function update_session_data($session_key, $expiry, $data=null){
        $data['sesskey'] = $session_key;
        $data['expiry'] = $expiry;
        $data['data'] = serialize($data);
        return M("sessions_data")->add($data,$options=array(),$replace=true);
    }

    /**
     *根据session_key 获取 session_data
     */
    public function get_session_data($session_key){
        $data = M('sessions_data')->where(array('sesskey'=>$session_key))->find();
        if($data['expiry']>time()){
            return $data['data'];
        }else{
            //数据过期，删除数据
            M('sessions_data')->where(array('sesskey'=>$session_key))->delete();
            return false;
        }
    }

}